import { Injectable } from '@nestjs/common';
import * as moment from 'moment';
import { SolarTime } from '../../utils/bazi-utils';

@Injectable()
export class DatetimeService {
  /**
   * 解析时间字符串为 Date 对象
   * @param datetime 时间字符串
   * @returns Date 对象（北京时间）
   */
  parseDateTime(datetime: string): Date {
    const m = moment(datetime.trim(), [
      'YYYY-MM-DD HH:mm:ss',
      'YYYY-MM-DD HH:mm',
      'YYYY-MM-DD',
      'YYYY/MM/DD HH:mm:ss',
      'YYYY/MM/DD HH:mm',
      'YYYY/MM/DD'
    ], true); // 严格模式
    
    if (!m.isValid()) {
      throw new Error('时间格式错误，请使用 YYYY-MM-DD HH:mm 格式');
    }
    
    // 如果没有时间部分，默认添加 12:00
    if (!m.format('HH:mm:ss').includes(':')) {
      m.hour(12).minute(0).second(0);
    }
    
    // 返回 Date 对象（北京时间）
    return m.toDate();
  }

  /**
   * 将 Date 对象转换为 SolarTime
   * @param date Date 对象
   * @returns SolarTime 对象
   */
  dateToSolarTime(date: Date): SolarTime {
    return SolarTime.fromYmdHms(
      date.getFullYear(),
      date.getMonth() + 1, // JavaScript月份从0开始，需要+1
      date.getDate(),
      date.getHours(),
      date.getMinutes(),
      0 // 秒数固定为0
    );
  }

  /**
   * 解析时间字符串并转换为 SolarTime
   * @param datetime 时间字符串
   * @returns SolarTime 对象
   */
  parseToSolarTime(datetime: string): SolarTime {
    const date = this.parseDateTime(datetime);
    return this.dateToSolarTime(date);
  }
}
